﻿using Sinacor.Infra.Service.Security.Services;
using System.Collections.Generic;

namespace Sinacor.Servico.Bovespa.Ordens.Service.ServiceImplementation
{
    [SinacorServiceBehavior]
    public class MegaBolsa: ServiceContract.IMegaBolsa
    {
        #region IMegaBolsa Members

        /// <summary>
        /// Autor: Eduardo Sertorio
        /// Data: 21/11/2007
        /// Descricao: Alteracao de Ordem da Mega Bolsa
        /// 
        /// Autor: Eduardo Sertorio
        /// Data: 26/12/2007
        /// Descricao: Inclusao do retorno do DataContracts de Response
        /// </summary>
        /// <param name="request">DataContract.Request.AlterarOrdemMegaBolsaRequest</param>
        /// <returns>DataContract.Response.AlterarOrdemMegaBolsaResponse</returns>      
        /////[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
        public DataContract.Response.AlterarOrdemMegaBolsaResponse AlterarOrdemMegaBolsa(DataContract.Request.AlterarOrdemMegaBolsaRequest request)
        {
            //Transformar DC to BE
            BusinessEntity.OrdemMegaBolsa beOrdemMegaBolsaRequest = Translator
                .TranslateBetweenAlterarOrdemMegaBolsaRequestAndOrdemMegaBolsa
                .TranslateAlterarOrdemMegaBolsaRequestToOrdemMegaBolsa(request);

            //Executar
            BusinessEntity.OrdemMegaBolsa beOrdemMegaBolsaResponse = (new BusinessLogic.OrdemMegaBolsa()).AlterarOrdemMegaBolsa(beOrdemMegaBolsaRequest, request.DataPregao);

            //Transformar BE to DC
            DataContract.Response.AlterarOrdemMegaBolsaResponse response = Translator
                .TranslateBetweenOrdemMegaBolsaAndAlterarOrdemMegaBolsaResponse
                .TranslateOrdemMegaBolsaToAlterarOrdemMegaBolsaResponse(beOrdemMegaBolsaResponse);

            response.DataPregao = request.DataPregao;

            //Retornar
            return response;
        }

        /// <summary>
        /// Operacao responsavel por validar o percentual de reducao/acrescimo da ordem mega bolsa
        /// Historico:
        /// Data : 02/01/2008
        /// Autor: Eduardo Sertorio
        ///	Obs. : Criação da operacao
        /// 
        /// Data : 01/02/2008
        /// Autor: Eduardo Sertorio
        ///	Obs. : Revisao da operacao
        /// </summary>
        /// <param name="request"></param>
        public void ValidarPercentualReducaoAcrescimoOrdemMegaBolsa(DataContract.Request.AlterarOrdemMegaBolsaRequest request)
        {
            //transformar
            BusinessEntity.OrdemMegaBolsa ordemAlterada = Translator
                .TranslateBetweenAlterarOrdemMegaBolsaRequestAndOrdemMegaBolsa
                .TranslateAlterarOrdemMegaBolsaRequestToOrdemMegaBolsa(request);

            //executar
            (new BusinessLogic.OrdemMegaBolsa()).ValidarPercentualReducaoAcrescimoOrdemMegaBolsa(ordemAlterada);
        }

        /// <summary>
        /// Consultar Ordens Abertas pelo Mega Bolsa
        /// </summary>
        /// <param name="request"></param>
        /// <returns>ConsultarOrdemMegaBolsaResponse</returns>
        public List<DataContract.Response.ConsultarOrdemMegaBolsaResponse> ConsultarOrdemMegaBolsa(DataContract.Request.ConsultarOrdemMegaBolsaRequest request)
        {
            //transformar List/DataContract to List/BusinessEntity
            BusinessEntity.OrdemMegaBolsa beOrdemMegaBolsa = Translator
                .TranslateBetweenConsultarOrdemMegaBolsaRequestAndOrdemMegaBolsa
                .TranslateConsultarOrdemMegaBolsaRequestToOrdemMegaBolsa(request);

            //executar
            List<BusinessEntity.OrdemMegaBolsa> listOrdemMegaBolsa = (new BusinessLogic.OrdemMegaBolsa()).ConsultarOrdemMegaBolsa(beOrdemMegaBolsa);

            //transformar List/BusinessEntity to List/DataContract
            List<DataContract.Response.ConsultarOrdemMegaBolsaResponse> response = Translator
                    .TranslateBetweenOrdemMegaBolsaAndConsultarOrdemMegaBolsaResponse
                    .TranslateOrdemMegaBolsaListToConsultarOrdemMegaBolsaResponseList(listOrdemMegaBolsa);

            //retornar     
            return response;
        }

        /// <summary>
        /// Operacao responsavel por validar o codigo de carteira da ordem mega bolsa
        /// Historico:
        /// Data:	02/01/2008
        /// Autor:	Eduardo Sertorio
        ///	Observacoes:  Criação da operacao
        /// </summary>
        public DataContract.Response.AlterarOrdemMegaBolsaResponse ValidarCarteiraOrdemMegaBolsa(DataContract.Request.AlterarOrdemMegaBolsaRequest request)
        {
            //declarar
            BusinessEntity.OrdemMegaBolsa ordemAlteradaRequest = null;
            BusinessLogic.OrdemMegaBolsa blOrdemMegaBolsa = new BusinessLogic.OrdemMegaBolsa();
            BusinessEntity.OrdemMegaBolsa ordemAlteradaResponse = null;
            DataContract.Response.AlterarOrdemMegaBolsaResponse response = null;

            //transformar DC em BE
            ordemAlteradaRequest = Translator
                .TranslateBetweenAlterarOrdemMegaBolsaRequestAndOrdemMegaBolsa
                .TranslateAlterarOrdemMegaBolsaRequestToOrdemMegaBolsa(request);

            //executar
            ordemAlteradaResponse = blOrdemMegaBolsa.ValidarCarteiraOrdemMegaBolsa(ordemAlteradaRequest);

            //transformar BE em DC
            response = Translator
                .TranslateBetweenOrdemMegaBolsaAndAlterarOrdemMegaBolsaResponse
                .TranslateOrdemMegaBolsaToAlterarOrdemMegaBolsaResponse(ordemAlteradaResponse);

            //retornar
            return response;
        }

        /// <summary>
        /// Operacao responsavel por validar o tipo de liquidacao da ordem mega bolsa
        /// Historico:
        /// Data:	02/01/2008
        /// Autor:	Eduardo Sertorio
        ///	Observacoes:  Criação da operacao
        /// 
        /// Data : 27/02/2008 - 200802271150
        /// Autor: Eduardo Sertorio
        ///	Obs. : Revisao
        /// </summary>
        public DataContract.Response.AlterarOrdemMegaBolsaResponse ValidarTipoLiquidacaoOrdemMegaBolsa(DataContract.Request.AlterarOrdemMegaBolsaRequest request)
        {

            //transformar DC em BE
            BusinessEntity.OrdemMegaBolsa ordemAlterada = Translator
                .TranslateBetweenAlterarOrdemMegaBolsaRequestAndOrdemMegaBolsa
                .TranslateAlterarOrdemMegaBolsaRequestToOrdemMegaBolsa(request);

            //executar
            BusinessEntity.OrdemMegaBolsa ordemAlteradaResponse = (new BusinessLogic.OrdemMegaBolsa()).ValidarTipoLiquidacaoOrdemMegaBolsa(ordemAlterada);

            //transformar BE em DC
            DataContract.Response.AlterarOrdemMegaBolsaResponse response = Translator
                .TranslateBetweenOrdemMegaBolsaAndAlterarOrdemMegaBolsaResponse
                .TranslateOrdemMegaBolsaToAlterarOrdemMegaBolsaResponse(ordemAlteradaResponse);

            //retornar
            return response;
        }

        #endregion
    }
}
